<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // JS基本数据
    // string number boolean  null  undefined  object(array)

    // 值类型(基本数据类型): string number boolean  null  undefined 
    //       (1) 值类型存储在栈内存当中 => 一个萝卜一个坑

    // 引用类型(引用数据类型):   object(array)  
    //       (2)  存储在堆内存当中  => 对象都是引用类型(null除外)
    
    // 浅复制: 多个变量/数据 引用同一片内存地址(===),如果一个内存地址中的数据改变,修改一个,另一个也会收到影响
    //  如果两个变量/数据 全等 => 浅复制

    var a = 1;
    var b = a; // b = 1
    b = 2;
    console.log(a, b); // 1 2 

    //  对象的赋值属于浅复制  => 多个变量/数据 引用同一片内存地址, 修改一个, 另一个也会收到影响
    var arr = [1, 2, 3];
    var brr = arr;
    brr[brr.length] = 4;
    console.log(arr, brr, arr === brr); // [1,2,3]  [1,2,3,4]


    // 深复制  得到一个与原数组数据相同的新数组
    // (1) 新建数组,遍历原数组,将原数组中的每个元素放到新数组中
    // (2) 使用数组的拓展方法 slice()  concat() 
    var arr = [1, 2, 3];
    var brr = [];
    for(var i = 0;i< arr.length;i++){
        var item = arr[i];
        brr[brr.length] = item;
    }
    brr[brr.length] = 4;
    console.log(arr,brr,arr === brr);

    var brr = arr.slice();
    var brr = arr.concat();



    // 如何判断两个对象之间是否是浅复制?






</script>

</html>